package com.whfc.ms.api.fmam.service;

import com.whfc.common.result.ListData;
import com.whfc.common.result.PageData;
import com.whfc.entity.dto.OssPathDTO;
import com.whfc.fmam.entity.dto.*;
import com.whfc.fmam.entity.qo.RecvSendAnalysisQO;
import com.whfc.fuum.entity.SysUser;

import java.io.IOException;
import java.util.List;

/**
 * @Author: ；likang
 * @Description: 物资统计分析服务
 * @Date:Create：in 2019/12/9 11:32
 * @Version：1.0
 */
public interface MatAnalysisService {

    /**
     * 供应商供货明细列表
     *
     * @return
     * @Param request
     */
    FmamSendDetailAnaDTO sendSupplierList(RecvSendAnalysisQO request);

    /**
     * 供应商偏差情况分析超负差数列表服务
     *
     * @param request
     * @return
     */
    List<FmamSendSupplierDTO> supplierDiffNumRank(RecvSendAnalysisQO request);

    /**
     * 供应商偏差情况分析超负差率列表服务
     *
     * @param request
     * @return
     */
    List<FmamSendSupplierDTO> supplierDiffRateRank(RecvSendAnalysisQO request);

    /**
     * 按材料明细进行收料和发料汇总分析
     *
     * @param request
     * @return
     */
    FmamRecvSendAnaDTO analysisByMat(SysUser user, RecvSendAnalysisQO request);

    /**
     * 收发料汇总分析之根据材料id查找磅单列表
     *
     * @param pageNum
     * @param pageSize
     * @param matId
     * @param type
     * @param diffResult
     * @return
     */
    PageData<FmamRecvSendAnaMatDTO> getWeighNoteListByMatId(Integer pageNum, Integer pageSize, Long matId, Integer type, Integer diffResult);

    /**
     * 按材料类别进行收料和发料汇总分析
     *
     * @param request
     * @return
     */
    FmamRecvSendAnaDTO analysisByMatType(RecvSendAnalysisQO request);

    /**
     * 收发料汇总分析之根据材料类别查找磅单列表
     *
     * @param pageNum
     * @param pageSize
     * @param matTypeId
     * @param type
     * @param diffResult
     * @return
     */
    PageData<FmamRecvSendAnaMatDTO> getWeighNoteListByMatType(Integer pageNum, Integer pageSize, Long matTypeId, Integer type, Integer diffResult);

    /**
     * 供应商偏差情况分析--按供应商分组进行汇总分析
     *
     * @param request
     * @return
     */
    List<FmamSendSupplierDTO> analysisBySupplier(RecvSendAnalysisQO request);


    /**
     * 供应商供货偏差情况分析,按材料明细分组
     *
     * @param request
     * @return
     */
    ListData<FmamSupplierAnaMatDTO> supplierAnaByMatGroup(RecvSendAnalysisQO request);

    /**
     * 供应商偏差分析数据统计
     *
     * @param request
     * @return
     */
    FmamRecvSendAnaDTO analysisDiffData(RecvSendAnalysisQO request);

    /**
     * 根据供应商id查找磅单列表
     *
     * @param sendSupplierId
     * @param pageNum
     * @param pageSize
     * @param diffResult
     * @return
     */
    PageData<FmamRecvSendAnaMatDTO> getWeighNoteListBySupplier(Integer sendSupplierId, Integer pageNum, Integer pageSize, Integer diffResult);

    /**
     * 导出收发料汇总分析数据
     *
     * @param request
     * @return
     */
    OssPathDTO exportAnalysisByMatData(RecvSendAnalysisQO request) throws IOException;

    /**
     * 导出供应商偏差分析数据
     *
     * @param request
     * @return
     */
    OssPathDTO exportAnalysisBySupplierData(RecvSendAnalysisQO request) throws IOException;
}
